home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
pao
/
towns
/
cdplay
/
src
/
grp.c
< prev
next >
Wrap
Text File
|
1991-10-18
|
6KB
|
223 lines
/* << High C V1.4 >> **********************************************************
**
** グラフィックルーチン
**
** 1991.03.02 : CREATE
** 1991.03.02 : FINISH
**
** < HISTORY >
** 1991.03.02 : CREATE
**
** < note > : TABS = 4
**
** All Rights Reserved, Copyright (C) Y.Hirata 1991.
**
** Programmed by Y.Hirata ( Nifty ID : NAB03321 )
**
******************************************************************************/
#include <string.h>
#include <msdos.cf>
#include <egb.h>
#include "grp.h"
/*=============================================================================
** 使用上の注意事項
**
** 1. 描画モードや色の設定は、あらかじめ行っておいて下さい.
** EGB_paintMode() ;
** EGB_writeMode() ;
** EGB_color() ;
=============================================================================*/
/****************************** 描画領域設定 *******************************/
void viewport( char *egbwork,int x1,int y1,int x2,int y2 )
/*=============================================================================
** 描画領域(ビューポート)の設定を行う.
**
** < INPUT > : x1,y1 左上座標
** : x2,y2 右下座標
** < OUTPUT > : EGBライブラリ用作業域
** < RETURN > : なし
=============================================================================*/
{
struct {
short x1, y1, x2, y2 ;
} pview ; /* 描画領域設定用 */
pview.x1 = x1 ;
pview.y1 = y1 ;
pview.x2 = x2 ;
pview.y2 = y2 ;
EGB_viewport( egbwork,(char *)&pview ) ;
}
/******************************** テキスト表示 *********************************/
void disptext( char *egbwork,short x,short y,char *s )
/*=============================================================================
** 前景色で文字列の表示を行う.
**
** < INPUT > : x,y 表示座標
** : s 文字列格納先頭アドレス
** < OUTPUT > : EGBライブラリ用作業域
** < RETURN > : なし
=============================================================================*/
{
struct {
short x, y, len ;
char s[81] ;
} ptext ; /* テキスト表示用 */
ptext.x = x ;
ptext.y = y ;
ptext.len = strlen( s ) ;
if ( ptext.len > 80 ) {
strncpy( ptext.s,s,80 ) ;
ptext.s[80] = '\0' ;
ptext.len = 80 ;
} else {
strcpy( ptext.s,s ) ;
}
EGB_sjisString( egbwork,(char *)&ptext ) ;
}
/****************************** 矩形領域取得 *******************************/
void get( char *egbwork,int x1,int y1,int x2,int y2,unsigned int p,int bpp )
/*=============================================================================
** 矩形領域のデータ取得を行う.
**
** < INPUT > : x1,y1 左上座標
** : x2,y2 右下座標
** : p データ格納領域先頭アドレス
** : bpp 1ドット当たりのピクセル数
** < OUTPUT > : EGBライブラリ用作業域
** < RETURN > : なし
=============================================================================*/
{
struct {
unsigned int p ;
short dseg, x1, y1, x2, y2 ;
} pgetput ; /* EGB GET/PUT用 */
pgetput.p = p ;
pgetput.dseg = getds() ;
pgetput.x1 = x1 ;
pgetput.y1 = y1 ;
pgetput.x2 = x2 ;
pgetput.y2 = y2 ;
if ( bpp == 1 ) { /* 2色モードの時 */
EGB_getBlockColor( egbwork,(char *)&pgetput ) ;
} else { /* 多色モードの時 */
EGB_getBlock( egbwork,(char *)&pgetput ) ;
}
}
/****************************** 矩形領域設定 *******************************/
void put( char *egbwork,int x1,int y1,int x2,int y2,unsigned int p,int bpp )
/*=============================================================================
** 矩形領域にデータを書き込む.
**
** < INPUT > : x1,y1 左上座標
** : x2,y2 右下座標
** : p データ格納領域先頭アドレス
** : bpp 1ドット当たりのピクセル数
** < OUTPUT > : EGBライブラリ用作業域
** < RETURN > : なし
=============================================================================*/
{
struct {
unsigned int p ;
short dseg, x1, y1, x2, y2 ;
} pgetput ; /* EGB GET/PUT用 */
pgetput.p = p ;
pgetput.dseg = getds() ;
pgetput.x1 = x1 ;
pgetput.y1 = y1 ;
pgetput.x2 = x2 ;
pgetput.y2 = y2 ;
if ( bpp == 1 ) { /* 2色モードの時 */
EGB_putBlockColor( egbwork,0,(char *)&pgetput ) ;
} else { /* 多色モードの時 */
EGB_putBlock( egbwork,0,(char *)&pgetput ) ;
}
}
/******************************** 直線描画 *********************************/
void line( char *egbwork,int x1,int y1,int x2,int y2 )
/*=============================================================================
** 2点間を結ぶ直線を描く.
**
** < INPUT > : x1,y1 1点目の座標
** : x2,y2 2点目の座標
** < OUTPUT > : EGBライブラリ用作業域
** < RETURN > : なし
=============================================================================*/
{
struct {
short n ;
short x1, y1, x2, y2 ;
} pline ; /* 直線表示用 */
pline.n = 2 ;
pline.x1 = x1 ;
pline.y1 = y1 ;
pline.x2 = x2 ;
pline.y2 = y2 ;
EGB_connect( egbwork,(char *)&pline ) ;
}
/******************************** 矩形描画 *********************************/
void box( char *egbwork,int x1,int y1,int x2,int y2 )
/*=============================================================================
** 矩形を描く.
**
** < INPUT > : x1,y1 左上座標
** : x2,y2 右下座標
** < OUTPUT > : EGBライブラリ用作業域
** < RETURN > : なし
=============================================================================*/
{
struct {
short x1, y1, x2, y2 ;
} pbox ; /* 矩形表示用 */
pbox.x1 = x1 ;
pbox.y1 = y1 ;
pbox.x2 = x2 ;
pbox.y2 = y2 ;
EGB_rectangle( egbwork,(char *)&pbox ) ;
}
/******************************* 三角形描画 ********************************/
void triangle( char *egbwork,int x1,int y1,int x2,int y2,int x3,int y3 )
/*=============================================================================
** 3点を結ぶ三角形を描く.
**
** < INPUT > : x1,y1 1点目の座標
** : x2,y2 2点目の座標
** : x3,y3 3点目の座標
** < OUTPUT > : EGBライブラリ用作業域
** < RETURN > : なし
=============================================================================*/
{
struct {
short x1, y1, x2, y2, x3, y3 ;
} ptriangle ; /* 三角形表示用 */
ptriangle.x1 = x1 ;
ptriangle.y1 = y1 ;
ptriangle.x2 = x2 ;
ptriangle.y2 = y2 ;
ptriangle.x3 = x3 ;
ptriangle.y3 = y3 ;
EGB_triangle( egbwork,(char *)&ptriangle ) ;
}